O método proposto nesse projeto mostra como fazer a extração de informações de
um texto que, no caso, é sobre partidas de futebol.
O sistema inteiro pode ser extensível para novas funcionalidades ou
poder ser modificado para outros assuntos, como voleibol; ou assuntos que não
envolvam esportes.

O agente é implementado para automatizar a extração de informações de
um texto jornalístico e guardar numa estrutura de dados, o que permite uma
busca facilitada. As capacidades do sistema podem ser descritas como:

\begin{enumerate}
\item Utilizar técnicas de processamento de linguagem natural para identificar
as equipes, os gols e o estádio onde ocorre a partida;
\item Fazer o relacionamento, consolidação e armazenar essas informações em
um banco de dados;
\item Possibilitar a busca das informações das partidas realizadas usando uma
interface web.
\end{enumerate}

\section{Premissas e Escopo} 
O trabalho parte da premissa que os textos jornalísticos de futebol sejam bem
escritos, ou seja, que não tenham erros de ortografia e que a construção
sintática não tenha ambiguidades que comprometam a análise de frases que
contenham a relação entre equipes.

O futebol é um assunto vasto cujas notícias saem nos jornais
impressos e eletrônicos, como troca de jogadores, contusões em treinos ou
também sobre a alta cúpula. Esse trabalho vai ser
restrito apenas aqueles textos que saem logo após a partida, com o resultado e
os seus principais lances. Mesmo assim, não é esperado que o texto contenha as
informações nos formatos exatos ou que não seja ambiguo, e não é esperaod que em
todos os textos possam ser retiradas informações úteis.

Esse trabalho não tem o objetivo de criar um agente que procure
informações nas páginas da internet, mas que apenas os textos sem nenhuma
marcação de página (\emph{tags} HTML ou metadados) estejam disponíveis para
processamento.

Quanto às buscas efetuadas pelo usuário, tomamos como hipótese que o usuário
tem interesse principal nas equipes, antes das cidades. Por outro lado, quando
o mesmo digitar uma equipe, há um grande número das mesmas no campeonato
paulista que apresentam o mesmo nome da cidade. Assim, nestes casos, decidimos
por supor que o usuário deseja saber dados relativos à equipe.

A entrada buscada será bem limitada, apenas algumas categorias
serão utilizadas, em sua maioria as equipes de futebol, ou, em raras ocasiões,
cidades das partidas ou os estádios. Por isso, levamos em conta as técnicas de
Inteligência Artificial, um agente reativo que não leva em conta buscas anteriores será utilizado, não havendo necessidade de armazenamento das
buscas realizadas, visando otimizar o resultado.

Para o mecanismo de busca, o próprio servidor de testes do Django foi utilizado.
Para um site em produção, os criadores do \emph{framework} recomendam que seja
utilizado um servidor que suporta alta carga de requisićões, como o
\emph{Apache}. Como o objetivo de nosso trabalho não envolve publicar uma página web ao público,
foi decidido usar o servidor do Django.

\subsection{Diretrizes do Trabalho}
Para que esse trabalho pudesse ser mantido e expandido, foram usadas as
seguintes diretrizes:

\begin{itemize}
  \item O trabalho foi divido em módulos
que pudessem ser feitas modificações e expansões que não afetassem os outros
módulos. Com isso, a construção do projeto foi divida em vários módulos, como a
tokenizador, o refinamento lexical, analisador sintático, analisador semântico etc.

  \item Outra diretriz importante é o uso de software livre e conhecido pela
comunidade (distribuídos sob a licença GPL ou BSD). Com esse benefício, qualquer
software fornecedor a esse projeto pode ser modificado e devolvido à comunidade que o
mantém com as alterações propostas.

\end{itemize}

Por esse motivo foi usado o NLTK, o \emph{framework} para o desenvolvimento de
aplicações que tratam linguagem natural que tem licença GPL, uma comunidade
ativa, que possui um livro aberto para consulta pública na Internet.

\newpage
\section{Arquitetura} 
Nessa seção demonstraremos como o projeto foi dividido, mostrando a arquitetura
dos seus componentes e os seus pacotes.

\subsection{Arquitetura Geral}
O sistema desenvolvido é divido em dois grande módulos: o módulo extrator de
informações, cujo objetivo é extrair as informações do texto jornalístico e
montar uma estrutura de dados, e o módulo de cusca de informações.

\begin{figure}[h]
\centering
\includegraphics[width=0.4\textwidth]{imagens/implementacao/arquitetura_geral.png}
\caption{Arquitetura Geral do Sistema}
\end{figure}

Para intermediar esses dois grandes módulos, a estrutura de dados é gravada em
um banco de dados, que é preenchido pelo Extrator e é consultado depois pelo
Extrator e pelo Buscador.

\subsection{Estrutura de Pacotes}

O sistema pode ser divido nos seguintes pacotes:

\begin{itemize}
\item \textbf{Extrator de Informações:} contém os módulos de processamento
de linguagem natural para extração de informações;
\item \textbf{Buscador de Dados:} contém módulos de interface com o usuário
via web e processamento de busca;
\item \textbf{Django:} contém os módulos do \emph{framework} web.
\end{itemize}

\begin{figure}[h]
\centering
\includegraphics[width=0.4\textwidth]{imagens/implementacao/pacotes.png}
\caption{Estrutura Geral de Pacotes}
\end{figure}

Essa seção trata os pacotes do Extrator e do Buscador que foram
desenvolvidos no projeto.

\subsubsection{Pacote Extrator de Informações}

O pacote Extrator de Informações está divido nos módulos de processamento
de linguagem natural. Ele contém os três módulos:

\begin{itemize}
\item \textbf{Analisador Léxico}: extração de \emph{tokens} e etiquetação;
\item \textbf{Analisador Sintático}: extração de construções sintáticas;
\item \textbf{Analisador Semântico}: retirada de informações das construções
sintáticas e contrução das estruturas de dados.
\end{itemize}

\subsubsection{Pacote Buscador de Informações}

O pacote Buscador de Informações, mais simples que o Extrator, tem dois módulos:

\begin{itemize}
  \item \textbf{Agente}: agente reativo, processando a busca e obtendo
  resultados;
  \item \textbf{Processamento de resultado}: módulo de construção da página de
  resultados da busca.
\end{itemize}

\newpage
\section{Extrator de Informações}

Aqui nesse texto há informações do subsistema extrator de informações cujo
objetivo é criar um processamento de linguagem natural sobre um texto jornalístico e extrair
informações sobre uma partida.

\begin{figure}[h]
\centering
\includegraphics[width=0.75\textwidth]{imagens/implementacao/arquitetura.png}
\caption{Arquitetura do Extrator de informações}
\end{figure}


\subsection{Analisador Léxical}
\input{implementacao_lexico.tex}

\subsection{Analisador Sintático}
\input{implementacao_sintatico.tex}

\subsection{Analisador Semântico e Gerador da Estrutura}
\input{implementacao_semantico.tex}

\newpage
\section{Estrutura de Dados - Persistência}
Para modelar a persistência de dados, foi feito o seguinte Diagrama
Entidade-Relacionamento:

\begin{itemize}
\item \textbf{Equipe:} equipes que participaram do campeonato. É preenchida na
criação do sistema.
\item \textbf{Cidade:} cidades onde ocorrem os jogos. É preenchida na
criação do sistema.
\item \textbf{Estadio:} estádio onde ocorrem os jogos que são ligados às
cidades. É preenchido na criação do sistema.
\item \textbf{Partida:} contém as partidas do campeonato com as equipes e o
resultado do jogo. É preenchida pelo Extrator de Informações.
\end{itemize}

\begin{figure}[h]
\centering
\includegraphics[width=0.75\textwidth]{imagens/implementacao/modelo_er.png}
\caption{Modelo Entidade-Relacionamento}
\end{figure}

As tabelas Equipe, Cidade e Estadio são utilizadas pelos Extrator de
Informações para uso de refinamento lexical, pois essas tabelas já estão
preenchidas com os dados do Campeonato Paulista de 2008. Elas também são
utilizadas pelo Buscador que usa também o analisador lexical para classificação
dos dados de entrada do usuário.

A tabela Partida, porém, contém as partidas do campeonado que são o resultado
da extração de dados feita pelo Extrator dos textos. Nela, nenhum dado é
obrigatório, pois o extrator por não achar uma equipe que participou da partida
ou o estádio, por exemplo. Essa tabela também é usada na consulta de
informações, que é feita pelo Buscador, a partir das relações lógicas que ele
faz com os dados das outras três tabelas.

Nos dois módulos foi usado o mapeamento objeto-relacional que é disponível no
\emph{framework} Django. Dessa forma, as aplicações têm uma camada de modelo de
dados,que torna as funções de consulta e criação simples, apenas usando programação
em linguagem Python.

\newpage
\section{Busca de Informações}
\input{implementacao_busca.tex}